//迷宫问题
#include <iostream>
using namespace std;
const int MAXN=10;

int dir_offset[8][2]={
    {-1,-1},{-1,0},{-1,1},
    {0,-1},{0,1},
    {1,-1},{1,0},{1,1}
};
int cells[MAXN][MAXN];
bool visited[MAXN][MAXN];

int n;
int total=0;
void search(int x,int y){
    if (x==0&&y==n-1) total++;
    else{
        for(int d=0;d<8;d++){
            int newx=x+dir_offset[d][0];
            int newy=y+dir_offset[d][1];
            if (newx<0||newx>=n||newy<0||newy>=n) continue;
            if (!cells[newx][newy]&&!visited[newx][newy]){
                visited[newx][newy]=true;
                search(newx,newy);
                visited[newx][newy]=false;
            }
        }
    }
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++) cin>>cells[i][j];
    visited[0][0]=true;
    search(0,0);
    cout<<total;
}

